home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / mui / bcc_src.lha / Parser / Replace.cpp < prev    next >
C/C++ Source or Header  |  1998-03-15  |  1KB  |  90 lines

  1. #include "Replace.h"
  2. #include <string.h>
  3.  
  4. Replace::Replace()
  5. {
  6.     n = 0;
  7. }
  8.  
  9. void Replace::Clear( void )
  10. {
  11.  short f;
  12.  
  13.  for( f = 0; f < n; f++ ) delete dat[f];
  14.  
  15.  n = 0;
  16. }
  17.  
  18. Replace::~Replace()
  19. {
  20.  Clear(); 
  21. }
  22.  
  23. void Replace::Add( char *old, short olds, char *_new, short news, char *extra )
  24. {
  25.   repdat *rd = new repdat( old, olds, _new, news );
  26.   
  27.   short i;
  28.   for( i = 0; i < n; i++ ) if( dat[i]->o[0] <= rd->o[0] ) break;
  29.   
  30.   short f;
  31.   for( f = n; f > i; f-- ) dat[f] = dat[f-1];
  32.   
  33.   if( extra ) rd->extra = extra;
  34.   
  35.   dat[i] = rd;
  36.   n++;
  37.  
  38. }
  39.  
  40. repdat::repdat( char *old, short olds, char *_new, short news )
  41. {
  42.  
  43.  if( !olds ) olds = strlen( old );
  44.  o = new char[olds+1];
  45.  memcpy( o, old, olds );
  46.  o[olds] = 0;
  47.  os = olds;
  48.  
  49.  if( !news ) news = strlen( _new );
  50.  n = new char[news+1];
  51.  memcpy( n, _new, news );
  52.  n[news] = 0;
  53.  ns = news;
  54.  
  55. }
  56.  
  57. repdat::~repdat()
  58. {
  59.     if( o ) delete o;
  60.     if( n ) delete n;
  61. }
  62.  
  63. char *Replace::Check( char *s, short sl )
  64. {
  65.  
  66.     if( !sl ) sl = strlen( s );
  67.     
  68.     short f;
  69.     for( f = 0; f < n; f++ )
  70.         if( sl == dat[f]->os && !strncmp( s, dat[f]->o, sl ) ) return dat[f]->n;
  71.         
  72.     return 0;
  73.  
  74. }
  75.  
  76.  
  77.  
  78. char *Replace::GetExtra( char **ex )
  79. {
  80.  
  81.     while( gec < n && !((char*)dat[gec]->extra) ) gec++;
  82.     
  83.     if( gec >= n ) return 0;
  84.     
  85.     
  86.     *ex = (char*)dat[gec]->extra;
  87.     return dat[gec++]->n;
  88.  
  89.  
  90. }